package tela;

import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import ferramentas.Query;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pessoal.*;
import tentativa.Tentativa;
import tentativa.TentativaDemanda;

/**
 *
 * @author ciar
 */
public class formularioCadastro extends HttpServlet implements validavel {

    Query q;
    Usuario usuario;
    SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();


        boolean editar = request.getParameter("editar") != null ? true : false;
        if (editar) {
            usuario = (Usuario) request.getSession().getAttribute("usuario");
        }

        Date nascimento = null;
        try {
            nascimento = formater.parse(request.getParameter("nascimento").replaceAll("-", "/"));
        } catch (ParseException ex) {
            System.out.println("Erro no campo Data de Nascimento:\n" + ex);
        }
        char sexo = request.getParameter("sexo").toLowerCase().charAt(0);

        String[] escolaridades = request.getParameterValues("escolaridade");

        String email = request.getParameter("email");
        String telefone = request.getParameter("telefone");
        String ddd = request.getParameter("ddd");
        String senha = request.getParameter("senha");
        String cpf = request.getParameter("cpf");
        String nomePOST = request.getParameter("nome").toUpperCase();

        String nome = getNome(nomePOST.trim());
        String sobrenome = getSobrenome(nomePOST.trim());

        int cidadeId = Integer.parseInt(request.getParameter("cidade"));
        int estadoId = Integer.parseInt(request.getParameter("estado"));

        Endereco endereco = new Endereco(
                request.getParameter("cep"),
                request.getParameter("logradouro"),
                request.getParameter("numero"),
                request.getParameter("bairro"),
                "",
                "",
                estadoId,
                cidadeId);
        boolean ensinoMedio = false;
        boolean graduacao = false;
        boolean especializacao = false;
        boolean mestrado = false;
        boolean doutorado = false;

        for (int i = 0; i < escolaridades.length; i++) {
            if (escolaridades[i].equals("ensinomedio")) {
                ensinoMedio = true;
            }
            if (escolaridades[i].equals("graduacao")) {
                graduacao = true;
            }
            if (escolaridades[i].equals("especializacao")) {
                especializacao = true;
            }
            if (escolaridades[i].equals("mestrado")) {
                mestrado = true;
            }
            if (escolaridades[i].equals("doutorado")) {
                doutorado = true;
            }
        }

        if (usuario != null && editar) {
            usuario.setNome(nome);
            usuario.setSobrenome(sobrenome);
            usuario.setNascimento(nascimento);
            usuario.setSexo(sexo);
            usuario.setEnsinoMedio(ensinoMedio);
            usuario.setGraduacao(graduacao);
            usuario.setEspecializacao(especializacao);
            usuario.setMestrado(mestrado);
            usuario.setDoutorado(doutorado);
            usuario.setEmail(email);
            usuario.setDdd(ddd);
            usuario.setTelefone(telefone);
            usuario.setSenha(senha);
            usuario.setEndereco(endereco);
        } else {
            usuario = new Usuario(cpf, nome, sobrenome, nascimento, sexo, ensinoMedio, graduacao, especializacao, mestrado,
                    doutorado, email, ddd, telefone, senha, endereco);
        }
        q = new Query();
        try {
            if (editar) {
                q.atualizarUsuario(usuario);
            } else {
                q.inserirUsuario(usuario);
            }
            request.getSession().setAttribute("usuario", usuario);
        } catch (MySQLIntegrityConstraintViolationException ex) {

            out.println("<script type='application/javascript' language='javascript'>");
            out.println("window.alert('Não foi possível realizar o cadastro - usuário já cadastrado');");
            out.println("window.location ='index.jsp?conteudo=cadastro';");
            out.println("</script>");

        } catch (SQLException ex) {
            System.out.println(ex);
            out.println("<script type='application/javascript' language='javascript'>");
            out.println("window.alert('Não foi possível realizar o cadastro - erro no preenchimento');");
            out.println("window.location ='index.jsp?conteudo=cadastro" + (editar ? "&editar=1" : "") + "';");
            out.println("</script>");
        }

        out.println("<script type='application/javascript' language='javascript'>");
        Tentativa tentativa = (Tentativa) request.getSession().getAttribute("tentativa");
        if (tentativa != null) {
            if (tentativa instanceof TentativaDemanda) {
                out.println("window.alert('Cadastrado com sucesso! Retornando à tela de Solicitação de Cursos...');");
                out.println("document.location.href='" + tentativa.getDica() + "';");
            } else {
                String curso = tentativa.getDica();
                String tipo = tentativa.getDica();
                out.println("window.alert('Cadastrado com sucesso! Retornando à sua inscrição...');");
                out.println("window.location ='index.jsp?conteudo=inscricao_documentos&curso=" + curso + "&tipo=" + tipo + "';");
            }
        } else {
            if (editar) {
                out.println("window.alert('Atualizado com sucesso!');");
            } else {
                out.println("window.alert('Cadastrado com sucesso!');");
            }
            out.println("window.location ='index.jsp?conteudo=inscricoes';");

        }
        out.println("</script>");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public void validar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    private String getNome(String nomePOST) {
        if (nomePOST.indexOf(" ") != -1) { // provavelmente possui sobrenome
            return nomePOST.substring(0, nomePOST.indexOf(" "));
        } else {
            return nomePOST;
        }
    }

    private String getSobrenome(String nomePOST) {
        try {
            if (nomePOST.indexOf(" ") != -1) { // provavelmente possui sobrenome
                return nomePOST.substring(nomePOST.indexOf(" ") + 1, nomePOST.length());
            } else {
                return "(Sobrenome não informado)";
            }
        } catch (IndexOutOfBoundsException ex) {
            return "(Sobrenome não informado)";
        }
    }
}
